package com.mc.api.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mc.api.constant.Constants;
import com.mc.api.domain.*;
import com.mc.api.domain.page.CltResultPage;
import com.mc.api.domain.page.PageRequest;
import com.mc.api.domain.page.PageResult;
import com.mc.api.mapper.CltResultMapper;
import com.mc.api.mapper.CltResultUserMapper;
import com.mc.api.mapper.LabAuthenticateMapper;
import com.mc.api.service.ICltMultimediaService;
import com.mc.api.service.ICltResultService;
import com.mc.api.tools.PageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Service
public class CltResultServiceImpl implements ICltResultService {

    @Autowired
    private CltResultMapper cltResultMapper;

    @Autowired
    private ICltMultimediaService cltMultimediaService;

    @Autowired
    private CltResultUserMapper cltResultUserMapper;

    @Autowired
    private LabAuthenticateMapper labAuthenticateMapper;

    /**
     * 查询采记录
     *
     * @param id 采记录ID
     * @return 采记录
     */
    @Override
    public CltResult selectCltResultById(String id)
    {
        return cltResultMapper.selectCltResultById(id);
    }

    /**
     * 查询采记录列表
     *
     * @param cltResultPage 采记录
     * @return 采记录
     */
    @Override
    public PageResult selectCltResultPage(CltResultPage cltResultPage) {
        return PageUtils.getPageResult(cltResultPage, getPageInfo( cltResultPage));
    }

    /**
     * 新增采记录
     *
     * @param cltResult 采记录
     * @return 结果
     */
    @Override
    public int insertCltResult(CltResult cltResult)
    {
        return cltResultMapper.insertCltResult(cltResult);
    }

    @Transactional
    @Override
    public void insertCltResultGermplasm(CltResultGermplasm cltResultGermplasm) {
        cltResultMapper.insertCltResult(cltResultGermplasm);
        cltResultMapper.insertCltResultGermplasm(cltResultGermplasm);
        List<CltMultimedia> photoList = cltResultGermplasm.getPhoto();
        for(CltMultimedia multimedia:photoList){
            multimedia.setCltId(cltResultGermplasm.getCltResultId());
            multimedia.setCreatedBy(cltResultGermplasm.getCreateUserId());
            cltMultimediaService.insertCltMultimedia(multimedia);
        }
        List<CltResultUser> userList = cltResultGermplasm.getUserList();
        for(CltResultUser user : userList){
            user.setCltId(cltResultGermplasm.getCltResultId());
            cltResultUserMapper.insertCltResultUserResult(user);
        }
//        if(cltResultGermplasm.getCltName()!=null||!"".equals(cltResultGermplasm.getCltName())){
//
//            String uuid  = UUID.randomUUID().toString().replaceAll("-","");
//            LabAuthenticate labAuthenticate = new LabAuthenticate();
//            labAuthenticate.setCltId(labAuthenticate.getResultId());
//            labAuthenticate.setAuthenticateId(uuid);
//            labAuthenticateMapper.insertLabAuthenticate();
//        }
    }

    @Transactional
    @Override
    public void insertCltResultSpecimen(CltResultSpecimen cltResultSpecimen) {
        cltResultMapper.insertCltResult(cltResultSpecimen);
        cltResultMapper.insertCltResultSpecimen(cltResultSpecimen);
        List<CltMultimedia> photoList = cltResultSpecimen.getPhoto();
        for(CltMultimedia multimedia:photoList){
            multimedia.setCltId(cltResultSpecimen.getCltResultId());
            multimedia.setCreatedBy(cltResultSpecimen.getCreateUserId());
            cltMultimediaService.insertCltMultimedia(multimedia);
        }
        List<CltResultUser> userList = cltResultSpecimen.getUserList();
        for(CltResultUser user : userList){
            user.setCltId(cltResultSpecimen.getCltResultId());
            cltResultUserMapper.insertCltResultUserResult(user);
        }
    }

    @Override
    public void updateIsAuthenticate(String id) {
        cltResultMapper.updateIsAuthenticate(id);
    }

    @Override
    public PageResult selectCltResultByTaskID(String taskId,PageRequest resultPage) {
        int pageNum = resultPage.getPageNum();
        int pageSize = resultPage.getPageSize();
        PageHelper.startPage(pageNum, pageSize);
        List<CltResult> cltResult = cltResultMapper.selectCltResultByTaskIDPage(taskId);

        return PageUtils.getPageResult(resultPage, new  PageInfo<CltResult>(cltResult));

    }

    @Override
    public List<CltResult> selectCltResultByTaskID(String taskId) {
        return cltResultMapper.selectCltResultByTaskID(taskId);
    }

    @Override
    public CltResultGermplasm selectCltResultGermplasm(String cltId) {

        CltResultGermplasm germplasm = cltResultMapper.selectCltResultGermplasm(cltId);
        //germplasm.setPhoto();
        return germplasm;
    }

    @Override
    public CltResultSpecimen selectCltResultSpecimen(String cltId) {
        return cltResultMapper.selectCltResultSpecimen(cltId);
    }

    @Override
    public int updateCltResult(CltResult cltResult) {
        return cltResultMapper.updateCltResult(cltResult);
    }

    @Override
    public int countCltResult(Clt cltResult) {
        return cltResultMapper.countCltResult(cltResult);
    }

    private PageInfo<CltResult> getPageInfo(CltResultPage cltResultPage) {
        int pageNum = cltResultPage.getPageNum();
        int pageSize = cltResultPage.getPageSize();
        PageHelper.startPage(pageNum, pageSize);
        List<CltResult> cltResultList = cltResultMapper.selectCltResultPage(cltResultPage);
        List<CltResult> cltResultReturnList = new ArrayList<CltResult>();

        for(CltResult cltResult : cltResultList){
            CltResultUser cltResultUser = new CltResultUser();
            cltResultUser.setCltId(cltResult.getResultId());
            cltResult.setUserList(cltResultUserMapper.selectCltResultUserList(cltResultUser));
            cltResult.setAuthenticateNum(labAuthenticateMapper.selectLabAuthenticateNum(cltResult.getResultId()));
            String coverUrl = cltMultimediaService.getCoverUrl(cltResult.getResultId());
            cltResult.setCoverUrl(coverUrl);
            if(cltResult.getCollectionTime()!=null&&!"".equals(cltResult.getCollectionTime())){
                SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd");
                cltResult.setCollectionDate(format.format(cltResult.getCollectionTime()));
            }
            cltResultReturnList.add(cltResult);
        }
        return new PageInfo<CltResult>(cltResultList);
    }


}
